package com.molichuxing.services.infrastructure.service;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.framework.service.RootService;
import com.molichuxing.services.infrastructure.dto.request.create.EnterpriseCarCreateDto;
import com.molichuxing.services.infrastructure.dto.request.modify.EnterpriseCarModifyDto;
import com.molichuxing.services.infrastructure.dto.response.EnterpriseCarDto;
import com.molichuxing.services.property.EnterpriseCarStateEnum;

import java.util.List;
import java.util.Map;
/**
 * 企业订单车辆
 *
 * @Author zoumingyu
 * @Date 2020年06月04日
 */
public interface EnterpriseCarService extends RootService {

    /**
     * 获取企业订单车辆信息
     *
     * @param orderCode 订单号
     * @return List
     */
    List<EnterpriseCarDto> getEnterpriseCar(Long orderCode);

    /**
     * 获取企业订单车辆信息
     *
     * @param orderCode 订单号
     * @param carState  企业订单车辆状态
     * @return List
     */
    List<EnterpriseCarDto> getEnterpriseCar(Long orderCode, EnterpriseCarStateEnum carState);

    /**
     * 获取企业订单车辆信息
     *
     * @param orderCode 订单号
     * @param carId     车辆id
     * @return EnterpriseCarDto
     */
    EnterpriseCarDto getEnterpriseCar(Long orderCode, Integer carId);

    /**
     * 批量新增订单车辆信息
     *
     * @param createDtoList 新增信息
     * @return boolean
     */
    boolean createBatch(List<EnterpriseCarCreateDto> createDtoList);

    /**
     * 修改订单车辆状态
     *
     * @param orderCode 订单号
     * @param oldState  旧状态
     * @param newState  新状态
     * @return boolean
     */
    boolean modifyState(Long orderCode, EnterpriseCarStateEnum oldState, EnterpriseCarStateEnum newState);

    /**
     * 修改订单车辆信息-交车
     *
     * @param modifyDto 修改信息
     * @return boolean
     */
    boolean modifyDelivery(EnterpriseCarModifyDto modifyDto);

    /**
     * 修改订单车辆信息-还车（退租）
     *
     * @param modifyDto 修改信息
     * @return boolean
     */
    boolean modifyReturn(EnterpriseCarModifyDto modifyDto);

    /**
     * 修改订单车辆信息-过户
     *
     * @param modifyDto 修改信息
     * @return boolean
     */
    boolean modifyTransfer(EnterpriseCarModifyDto modifyDto);

    /**
     * 修改订单车辆信息-续租订单生效
     *
     * @param modifyDto 修改信息
     * @return boolean
     */
    boolean modifyLease(EnterpriseCarModifyDto modifyDto);

    /**
     * 修改订单车辆信息-续租生效，主订单到期
     *
     * @param modifyDto 修改信息
     * @return boolean
     */
    boolean modifyExpire(EnterpriseCarModifyDto modifyDto);


    /**
     * 根据订单号得到 EnterpriseCarDto
     *
     * @param orderCodeList
     * @return List
     */
    List<EnterpriseCarDto> listEnterpriseCar(List<Long> orderCodeList);

    /**
     * 车辆是否锁定
     *
     * @param carId 车辆id
     * @return boolean true:锁定，false：未锁定
     */
    boolean getCarIsLock(Integer carId);

    Paged<EnterpriseCarDto> getOrderCarList(Map<String, Object> params, int pageNum, int pageSize)
            throws Exception;

    /**
     * 根据状态查询车辆数
     * @param countParamMap
     * @return
     */
    Integer getCount(Map<String, Object> countParamMap);

    /**
     * 根据车辆id获取订单车辆
     * @param carId
     * @return
     */
    List<EnterpriseCarDto> getOrderCarListByCarId(Integer carId);
}
